home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 2 / The 640 Meg Shareware Studio CD-ROM Volume II (Data Express)(1993).ISO / clang / jcool01.zip / TEST_QUE.C < prev    next >
C/C++ Source or Header  |  1992-09-23  |  11KB  |  273 lines

  1. //
  2. // Copyright (C) 1991 Texas Instruments Incorporated.
  3. //
  4. // Permission is granted to any individual or institution to use, copy, modify,
  5. // and distribute this software, provided that this complete copyright and
  6. // permission notice is maintained, intact, in all copies and supporting
  7. // documentation.
  8. //
  9. // Texas Instruments Incorporated provides this software "as is" without
  10. // express or implied warranty.
  11. //
  12.  
  13. #include <cool/String.h>
  14. #include <cool/Queue.h>
  15. #include <cool/Queue.C>
  16. #include <test.h>
  17.  
  18. typedef char* charP;
  19. Boolean my_compare_charP (const charP& s1, const charP& s2) {
  20.   return (strcmp (s1, s2) ? FALSE : TRUE);
  21. }
  22.  
  23. void test_int () {
  24.   int foo;
  25.   CoolQueue<int> q0;
  26.   TEST("CoolQueue<int> q0", q0.capacity(), 0);
  27.   CoolQueue<int> q1(5);
  28.   TEST("CoolQueue<int> q1(5)", q1.capacity(), 5);
  29.   CoolQueue<int> q2(10);
  30.   TEST("CoolQueue<int> q2(10)", q2.capacity(), 10);
  31.   TEST("q1.get(foo)", q1.get(foo), FALSE);   // false on an empty Queue
  32.   TEST("q1.unget(4)", q1.unget(4), TRUE);
  33.   TEST ("q1.length()", q1.length(), 1);
  34.   TEST("q1.get()", q1.get(), 4);
  35.   TEST ("q1.length()", q1.length(), 0);
  36.   TEST("q2.put(4)", q2.put(4), TRUE);
  37.   TEST("q2.unput()", q2.unput(), 4);
  38.   TEST("q1.put(5)", q1.put(5), TRUE);
  39.   TEST("q1.get()", q1.get(), 5);
  40.   TEST("q1.put(3)", q1.put(3), TRUE);
  41.   TEST("q1.unget(2)", q1.unget(2), TRUE);
  42.   TEST("q1.put(4)", q1.put(4), TRUE);
  43.   TEST ("q1.length()", q1.length(), 3);
  44.   TEST("q1.unget(1)", q1.unget(1), TRUE);
  45.   TEST("q1.put(5)", q1.put(5), TRUE);
  46.   TEST ("q1.length()", q1.length(), 5);
  47.   TEST("q1.look()", q1.look(), 1);
  48.   TEST("q2.put(1)", q2.put(1), TRUE);
  49.   TEST("q2.put(2)", q2.put(2), TRUE);
  50.   TEST("q2.put(3)", q2.put(3), TRUE);
  51.   TEST("q2.put(4)", q2.put(4), TRUE);
  52.   TEST("q2.put(5)", q2.put(5), TRUE);
  53.   TEST("q1.operator==(q2)", q1.operator==(q2), TRUE);
  54.   TEST("q1.find(5)", q1.find(5), TRUE);
  55.   TEST("q2.find(6)", q2.find(6), FALSE);
  56.   TEST("q1.remove()", q1.remove(), TRUE);
  57.   TEST ("q1.length()", q1.length(), 4);
  58.   TEST("q1.prev()", q1.prev(), TRUE);
  59.   TEST("q2.find(5)", q2.find(5), TRUE);
  60.   TEST("q2.next()", !q2.next(), TRUE);
  61.   TEST("q2.next()", q2.next(), TRUE);
  62.   TEST("q2.value()", q2.value(), 1);
  63.   TEST("q2.remove(3)", q2.remove(3), TRUE);
  64.   TEST("q2.value()", q2.value(), 4);
  65.   TEST("q1.operator=(q2)", q1.operator=(q2), q2);
  66.   TEST("q2.operator!=(q1)", q2.operator!=(q1), FALSE);
  67.   q2.reset();
  68.   TEST("q2.reset()", 1, 1);
  69.   TEST("q2.length()", q2.length(), 4);
  70.   q1.clear();
  71.   TEST("q1.clear()", 1, 1);
  72.   TEST ("q1.length()", q1.length(), 0);
  73.   TEST("q1.is_empty()", q1.is_empty(), TRUE);
  74.   q1.resize(10);
  75.   TEST("q1.resize(10)", 1, 1);
  76.   TEST ("q1.length()", q1.length(), 0);
  77.   TEST("q1.capacity()", q1.capacity(), 10);
  78.   CoolQueue<int> q3 = q2;
  79.   TEST("CoolQueue<int> q3 = q2", q3.operator==(q2), TRUE);
  80. }
  81.  
  82.  
  83. void test_double () {
  84.   double foo;
  85.   CoolQueue<double> q0;
  86.   TEST("CoolQueue<double> q0", q0.capacity(), 0);
  87.   CoolQueue<double> q1(5);
  88.   TEST("CoolQueue<double> q1(5)", q1.capacity(), 5);
  89.   CoolQueue<double> q2(10);
  90.   TEST("CoolQueue<double> q2(10)", q2.capacity(), 10);
  91.   TEST("q1.get(foo)", q1.get(foo), FALSE);   // false on an empty Queue
  92.   TEST("q1.unget(4.0)", q1.unget(4.0), TRUE);
  93.   TEST ("q1.length()", q1.length(), 1);
  94.   TEST("q1.get()", q1.get(), 4.0);
  95.   TEST ("q1.length()", q1.length(), 0);
  96.   TEST("q2.put(4.0)", q2.put(4.0), TRUE);
  97.   TEST("q2.unput()", q2.unput(), 4.0);
  98.   TEST("q1.put(5.0)", q1.put(5.0), TRUE);
  99.   TEST("q1.get()", q1.get(), 5.0);
  100.   TEST("q1.put(3.0)", q1.put(3.0), TRUE);
  101.   TEST("q1.unget(2.0)", q1.unget(2.0), TRUE);
  102.   TEST("q1.put(4.0)", q1.put(4.0), TRUE);
  103.   TEST ("q1.length()", q1.length(), 3);
  104.   TEST("q1.unget(1.0)", q1.unget(1.0), TRUE);
  105.   TEST("q1.put(5.0)", q1.put(5.0), TRUE);
  106.   TEST ("q1.length()", q1.length(), 5);
  107.   TEST("q1.look()", q1.look(), 1.0);
  108.   TEST("q2.put(1)", q2.put(1.0), TRUE);
  109.   TEST("q2.put(2)", q2.put(2.0), TRUE);
  110.   TEST("q2.put(3)", q2.put(3.0), TRUE);
  111.   TEST("q2.put(4)", q2.put(4.0), TRUE);
  112.   TEST("q2.put(5)", q2.put(5.0), TRUE);
  113.   TEST("q1.operator==(q2)", q1.operator==(q2), TRUE);
  114.   TEST("q1.find(5.0)", q1.find(5.0), TRUE);
  115.   TEST("q2.find(6.0)", q2.find(6.0), FALSE);
  116.   TEST("q1.remove()", q1.remove(), TRUE);
  117.   TEST ("q1.length()", q1.length(), 4);
  118.   TEST("q1.prev()", q1.prev(), TRUE);
  119.   TEST("q2.find(5.0)", q2.find(5.0), TRUE);
  120.   TEST("q2.next()", !q2.next(), TRUE);
  121.   TEST("q2.next()", q2.next(), TRUE);
  122.   TEST("q2.value()", q2.value(), 1.0);
  123.   TEST("q2.remove(3.0)", q2.remove(3.0), TRUE);
  124.   TEST("q2.value()", q2.value(), 4.0);
  125.   TEST("q1.operator=(q2)", q1.operator=(q2), q2);
  126.   TEST("q2.operator!=(q1)", q2.operator!=(q1), FALSE);
  127.   q2.reset();
  128.   TEST("q2.reset()", 1, 1);
  129.   TEST("q2.length()", q2.length(), 4);
  130.   q1.clear();
  131.   TEST("q1.clear()", 1, 1);
  132.   TEST ("q1.length()", q1.length(), 0);
  133.   TEST("q1.is_empty()", q1.is_empty(), TRUE);
  134.   q1.resize(10);
  135.   TEST("q1.resize(10)", 1, 1);
  136.   TEST ("q1.length()", q1.length(), 0);
  137.   TEST("q1.capacity()", q1.capacity(), 10);
  138.   CoolQueue<double> q3 = q2;
  139.   TEST("CoolQueue<double> q3 = q2", q3.operator==(q2), TRUE);
  140. }
  141.  
  142.  
  143. void test_charP () {
  144.   char* foo;
  145.   CoolQueue<char*> q0;
  146.   TEST("CoolQueue<char*> q0", q0.capacity(), 0);
  147.   CoolQueue<char*> q1(5);
  148.   TEST("CoolQueue<char*> q1(5)", q1.capacity(), 5);
  149.   CoolQueue<char*> q2(10);
  150.   TEST("CoolQueue<char*> q2(10)", q2.capacity(), 10);
  151.   TEST("q1.get(foo)", q1.get(foo), FALSE);   // false on empty Queue
  152.   q1.set_compare(&my_compare_charP);
  153.   TEST("q1.unget(\"AAA\")", q1.unget("AAA"), TRUE);
  154.   TEST("q1.get()", strcmp (q1.get(), "AAA"), 0);
  155.   TEST("q2.put(\"AAA\")", q2.put("AAA"), TRUE);
  156.   TEST("q2.unput()", strcmp (q2.unput(), "AAA"), 0);
  157.   TEST("q1.put(\"BBB\")", q1.put("BBB"), TRUE);
  158.   TEST("q1.get()", strcmp (q1.get(), "BBB"), 0);
  159.   TEST("q1.put(\"CCC\")", q1.put("CCC"), TRUE);
  160.   TEST("q1.unget(\"DDD\")", q1.unget("DDD"), TRUE);
  161.   TEST("q1.put(\"BBB\")", q1.put("BBB"), TRUE);
  162.   TEST("q1.unget(\"EEE\")", q1.unget("EEE"), TRUE);
  163.   TEST("q1.put(\"AAA\")", q1.put("AAA"), TRUE);
  164.   TEST("q1.look()", strcmp (q1.look(), "EEE"), 0);
  165.   TEST("q2.put(\"EEE\")", q2.put("EEE"), TRUE);
  166.   TEST("q2.put(\"DDD\")", q2.put("DDD"), TRUE);
  167.   TEST("q2.put(\"CCC\")", q2.put("CCC"), TRUE);
  168.   TEST("q2.put(\"BBB\")", q2.put("BBB"), TRUE);
  169.   TEST("q2.put(\"AAA\")", q2.put("AAA"), TRUE);
  170.   TEST("q1.operator==(q2)", q1.operator==(q2), TRUE);
  171.   TEST("q1.find(\"AAA\")", q1.find("AAA"), TRUE);
  172.   TEST("q2.find(\"FFF\")", q2.find("FFF"), FALSE);
  173.   TEST("q1.remove()", q1.remove(), TRUE);
  174.   TEST("q1.prev()", q1.prev(), TRUE);
  175.   TEST("q2.find(\"AAA\")", q2.find("AAA"), TRUE);
  176.   TEST("q2.next()", !q2.next(), TRUE);
  177.   TEST("q2.next()", q2.next(), TRUE);
  178.   TEST("q2.value()", strcmp (q2.value(), "EEE"), 0);
  179. // The following removed because a cfront 2.0 bug prevents it's compilation
  180. #ifdef BUGGYCFRONT
  181.   TEST("q2.remove(\"DDD\")", q2.remove("DDD"), TRUE);
  182.   TEST("q2.value()", strcmp (q2.value(), "CCC"), 0);
  183.   TEST("q2.length()", q2.length(), 4);
  184. #endif
  185.   TEST("q1.operator=(q2)", (q1.operator=(q2), q1==q2), TRUE);
  186.   TEST("q2.operator!=(q1)", q2.operator!=(q1), FALSE);
  187.   q2.reset();
  188.   TEST("q2.reset()", 1, 1);
  189.   q1.clear();
  190.   TEST("q1.clear()", 1, 1);
  191.   TEST("q1.is_empty()", q1.is_empty(), TRUE);
  192.   q1.resize(10);
  193.   TEST("q1.resize(10)", q1.capacity(), 10);
  194.   TEST("q1.capacity()", q1.capacity(), 10);
  195.   CoolQueue<char*> q3 = q2;
  196.   TEST("CoolQueue<char*> q3 = q2", q3.operator==(q2), TRUE);
  197. }
  198.  
  199.  
  200. void test_String () {
  201.   CoolQueue<CoolString> q0;
  202.   TEST("CoolQueue<CoolString> q0", q0.capacity(), 0);
  203.   CoolQueue<CoolString> q1(5);
  204.   TEST("CoolQueue<CoolString> q1(5)", q1.capacity(), 5);
  205.   CoolQueue<CoolString> q2(10);
  206.   TEST("CoolQueue<CoolString> q2(10)", q2.capacity(), 10);
  207.   //TEST("q1.get()", q1.get(), ERROR);   // should error on an empty Queue
  208.   TEST("q1.unget(CoolString(\"AAA\"))", q1.unget(CoolString("AAA")), TRUE);
  209.   TEST("q1.get()", strcmp (q1.get(), CoolString("AAA")), 0);
  210.   TEST("q2.put(CoolString(\"AAA\"))", q2.put(CoolString("AAA")), TRUE);
  211.   TEST("q2.unput()", strcmp (q2.unput(), CoolString("AAA")), 0);
  212.   TEST("q1.put(CoolString(\"BBB\"))", q1.put(CoolString("BBB")), TRUE);
  213.   TEST("q1.get()", strcmp (q1.get(), CoolString("BBB")), 0);
  214.   TEST("q1.put(CoolString(\"CCC\"))", q1.put(CoolString("CCC")), TRUE);
  215.   TEST("q1.unget(CoolString(\"DDD\"))", q1.unget(CoolString("DDD")), TRUE);
  216.   TEST("q1.put(CoolString(\"BBB\"))", q1.put(CoolString("BBB")), TRUE);
  217.   TEST("q1.unget(CoolString(\"EEE\"))", q1.unget(CoolString("EEE")), TRUE);
  218.   TEST("q1.put(CoolString(\"AAA\"))", q1.put(CoolString("AAA")), TRUE);
  219.   TEST("q1.look()", strcmp (q1.look(), CoolString("EEE")), 0);
  220.   TEST("q2.put(CoolString(\"EEE\"))", q2.put(CoolString("EEE")), TRUE);
  221.   TEST("q2.put(CoolString(\"DDD\"))", q2.put(CoolString("DDD")), TRUE);
  222.   TEST("q2.put(CoolString(\"CCC\"))", q2.put(CoolString("CCC")), TRUE);
  223.   TEST("q2.put(CoolString(\"BBB\"))", q2.put(CoolString("BBB")), TRUE);
  224.   TEST("q2.put(CoolString(\"AAA\"))", q2.put(CoolString("AAA")), TRUE);
  225.   TEST("q1.operator==(q2)", q1.operator==(q2), TRUE);
  226.   TEST("q1.find(CoolString(\"AAA\"))", q1.find(CoolString("AAA")), TRUE);
  227.   TEST("q2.find(\"FFF\")", q2.find("FFF"), FALSE);
  228.   TEST("q1.remove()", q1.remove(), TRUE);
  229.   TEST("q1.prev()", q1.prev(), TRUE);
  230.   TEST("q2.find(CoolString(\"AAA\"))", q2.find(CoolString("AAA")), TRUE);
  231.   TEST("q2.next()", !q2.next(), TRUE);
  232.   TEST("q2.next()", q2.next(), TRUE);
  233.   TEST("q2.value()", strcmp (q2.value(), CoolString("EEE")), 0);
  234.   TEST("q2.remove(CoolString(\"DDD\"))", q2.remove(CoolString("DDD")), TRUE);
  235.   TEST("q2.value()", strcmp (q2.value(), CoolString("CCC")), 0);
  236.   TEST("q1.operator=(q2)", (q1.operator=(q2), q1==q2), TRUE);
  237.   TEST("q2.operator!=(q1)", q2.operator!=(q1), FALSE);
  238.   q2.reset();
  239.   TEST("q2.reset()", 1, 1);
  240.   TEST("q2.length()", q2.length(), 4);
  241.   q1.clear();
  242.   TEST("q1.clear()", 1, 1);
  243.   TEST("q1.is_empty()", q1.is_empty(), TRUE);
  244.   q1.resize(10);
  245.   TEST("q1.resize(10)", q1.capacity(), 10);
  246.   TEST("q1.capacity()", q1.capacity(), 10);
  247.   CoolQueue<CoolString> q3 = q2;
  248.   TEST("CoolQueue<CoolString> q3 = q2", q3.operator==(q2), TRUE);
  249. }
  250.  
  251. void test_leak() {
  252.   for (;;) {
  253.     test_int();
  254.     test_double();
  255.     test_charP();
  256.     test_String();
  257.   }
  258. }
  259.  
  260. int main (void) {
  261.   START("CoolQueue");
  262.   test_int();
  263.   test_double();
  264.   test_charP();
  265.   test_String();
  266. #if LEAK
  267.   test_leak();
  268. #endif
  269.   SUMMARY();
  270.   return 0;
  271. }
  272.  
  273.